import logging
import os
from termcolor import colored
import util.file_util as file_util

'''
日志级别：
critical > error > warning > info > debug,notset
级别越高打印的日志越少，反之亦然，即
debug    : 打印全部的日志(notset等同于debug)
info     : 打印info,warning,error,critical级别的日志
warning  : 打印warning,error,critical级别的日志
error    : 打印error,critical级别的日志
critical : 打印critical级别


'''
# from conf import Config
logging.basicConfig(format="[%(asctime)s]%(message)s", level=logging.INFO)


# Loger = logging.getLogger("ChineseTradingNetwork")

class Logger:
    def __init__(self, name=__name__):
        # 创建一个loggger
        self.__name = name
        self.logger = logging.getLogger(self.__name)
        self.logger.setLevel(logging.DEBUG)

        # 创建一个handler，用于写入日志文件
        log_path = file_util.get_project_path()
        # TODO 待增加时间切分日志
        logname = log_path + '/log/' + 'out.log'  # 指定输出的日志文件名
        # fh = logging.handlers.TimedRotatingFileHandler(logname, when='M', interval=1, backupCount=5,encoding='utf-8')  # 指定utf-8格式编码，避免输出的日志文本乱码
        fh = logging.FileHandler(logname, mode='w', encoding='utf-8')  # 不拆分日志文件，a指追加模式,w为覆盖模式
        fh.setLevel(logging.DEBUG)

        # 创建一个handler，用于将日志输出到控制台
        ch = logging.StreamHandler()
        ch.setLevel(logging.DEBUG)

        # 定义handler的输出格式
        formatter = logging.Formatter('%(asctime)s-%(name)s-%(filename)s-[line:%(lineno)d]'
                                      '-%(levelname)s-[日志信息]: %(message)s',
                                      datefmt='%a, %d %b %Y %H:%M:%S')
        fh.setFormatter(formatter)
        ch.setFormatter(formatter)

        # 给logger添加handler
        self.logger.addHandler(fh)
        self.logger.addHandler(ch)

    @property
    def get_log(self):
        """定义一个函数，回调logger实例"""
        return self.logger


Loger = Logger("ChineseTradingNetwork").get_log
debugFlag = False  # 调试日志打印
globalDebugFlag = True  # 全局日志


def info(txt):
    Loger.info(f"{colored(txt, 'blue')}")
    return txt


def success(txt):
    Loger.info(f"{colored(txt, 'green')}")
    return txt


def warning(txt):
    Loger.info(f"{colored(txt, 'yellow')}")
    return txt


def error(txt):
    Loger.info(f"{colored(txt, 'red')}")
    return txt


def debug(txt):
    # if Config.debug:
    if globalDebugFlag and debugFlag:
        Loger.info(f"{colored(txt, 'cyan')}")
    return txt


def set_debug(flag):
    global debugFlag
    debugFlag = flag


"""
    全局debug相关的日志   
"""


def set_global_debug(flag):
    global debugFlag
    debugFlag = flag
    global globalDebugFlag
    globalDebugFlag = flag
